/*
假设你是一位很棒的家长，想要给你的孩子们一些小饼干。但是，每个孩子最多只能给一块饼干。
对每个孩子 i，都有一个胃口值 g[i]，这是能让孩子们满足胃口的饼干的最小尺寸；
并且每块饼干 j，都有一个尺寸 s[j] 。如果 s[j] >= g[i]，我们可以将这个饼干 j 分配给孩子 i ，这个孩子会得到满足。
你的目标是尽可能满足越多数量的孩子，并输出这个最大数值。

输入:
3 2
1 2 3
1 1

输出: 1

解释:
第1行 有两个数值，第1数值3 表示有3个孩子，第2数 2 表示有2块饼干；
第2行表示三个孩子，3个孩子的胃口值分别是：1,2,3。
第3行 表示你有两块小饼干，他们的尺寸都是1。
虽然你有两块小饼干，由于他们的尺寸都是1，你只能让胃口值是1的孩子满足。
所以你应该输出1。
*/

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int m, n; // m=孩子数，n=饼干数
    cin >> m >> n;
    int stu[m], cook[n], i, j, sum;
    for (i = 0; i < m; i++)
    {
        cin >> stu[i];
    }
    for (j = 0; j < n; j++)
    {
        cin >> cook[j];
    }
    sort(stu, stu + m); //从小到大排序
    sort(cook, cook + n); //从小到大排序
    j = 0;
    sum = 0;
    for (i = 0; i < m; i++) //从小到大满足孩子胃口
    {
        while(j<n)
        {
            if(stu[i]<=cook[j]) //当前孩子胃口被满足
            {
                sum++;
                j++;
                break;
            }
            j++;
        }
        //cout << "sum:"<<sum <<" stu:"<<stu[i]<<" cook:"<<cook[j]<< endl;
    }
    cout << sum;
    return 0;
}